package com.cpi.security.tag;

import java.io.IOException;

import javax.servlet.http.HttpSession;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;

import org.apache.commons.lang.StringUtils;

import KC.ModSegApp.EntidadModSegApp;
import KC.ModSegApp.UsuarioApp;

import com.cpi.cornpp.user.view.UserView;

/**
 * Tag Permiso para un modulo
 * 
 * <h1>Implementacion en JSP</h1>
 * <%@ taglib uri="/WEB-INF/tld/security.tld" prefix="s" %>
 * <s:modulo> body </s:modulo>
 * 
 * @author Edgar Joao
 * 
 */
public class SecurityAuthorizationModuleTag extends BodyTagSupport {
	/** Serial Version UID */
	private static final long serialVersionUID = 3920579665709979525L;
	/** Mensaje de Error */
	private static final String ERROR_LOG = "Error: IOEXception";//$NON-NLS-1$
	/** Nombre de variable de session para el usuario */
	private static final String USER_SESSION_NAME = "user";//$NON-NLS-1$
	/** ADMINISTRACION */
	private static final String ADMINISTRACION = "ADMINISTRACION";//$NON-NLS-1$
	/** LECTURA */
	private static final String LECTURA = "LECTURA";//$NON-NLS-1$
	/** nombreCortoMod Nombre Corto del Modulo */
	private String nombreCortoMod;
	/** permiso EntidadModSeg.ADMINISTRACION o EntidadModSeg.LECTURA **/
	private String permiso;
	/** usuario de la Aplicacion*/
	private UsuarioApp usuarioApp;
	/** UserView */
	private UserView userView;		
	/**
	 * Metodo para validar Permisos para modulo
	 */
	public int doAfterBody() throws JspException {
		try {
			BodyContent bc = getBodyContent();
			String cuerpo = bc.getString();
			JspWriter out = bc.getEnclosingWriter();
			HttpSession session = pageContext.getSession();
			userView = (UserView) session.getAttribute(USER_SESSION_NAME);
			usuarioApp =  (UsuarioApp) userView.getUserObject();
			if(StringUtils.equals(permiso, ADMINISTRACION)){
				if (usuarioApp.getAplicacionAValidar().getPermiso(nombreCortoMod , EntidadModSegApp.ADMINISTRACION)) {
					out.println(cuerpo);
				}
			}else if(StringUtils.equals(permiso, LECTURA)){
				if (usuarioApp.getAplicacionAValidar().getPermiso(nombreCortoMod , EntidadModSegApp.LECTURA)) {
					out.println(cuerpo);
				}
			}		
		} catch (IOException e) {
			throw new JspException(ERROR_LOG + e.getMessage());
		}
		return SKIP_BODY;
	}

	public String getNombreCortoMod() {
		return nombreCortoMod;
	}

	public void setNombreCortoMod(String nombreCortoMod) {
		this.nombreCortoMod = nombreCortoMod;
	}

	public String getPermiso() {
		return permiso;
	}

	public void setPermiso(String permiso) {
		this.permiso = permiso;
	}

	public UsuarioApp getUsuarioApp() {
		return usuarioApp;
	}

	public void setUsuarioApp(UsuarioApp usuarioApp) {
		this.usuarioApp = usuarioApp;
	}

	public UserView getUserView() {
		return userView;
	}

	public void setUserView(UserView userView) {
		this.userView = userView;
	}	
	
}
